from django.db import models
from django.urls import reverse_lazy


class News(models.Model):
    title = models.CharField(max_length=150, verbose_name='Наименование')
    content = models.TextField(blank=True, verbose_name='Контент')  # blank - данное поле не обязательно к заполнению
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата публикации')  # auto_now_add сохраняет дату и время только один раз при создании.
    updated_at = models.DateTimeField(auto_now=True, verbose_name='Обновлено')  #  auto_now обновляет дату и время при изменении.
    photo = models.ImageField(upload_to='photos/%Y/%m/%d', verbose_name='Фото', blank=True)  # upload_to позволяет указать куда мы хотим загружать файл
    is_published = models.BooleanField(default=True, verbose_name='Опубликовано')  # default=True новость по умолчанию публикуется
    category = models.ForeignKey('Category', on_delete=models.PROTECT, verbose_name='Категория')  # models.PROTECT - защита от удаления связанных данных
    views = models.IntegerField(default=0)  # количество просмотров

    def get_absolute_url(self):
        return reverse_lazy('view_news', kwargs={"pk": self.pk})

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Новость'
        verbose_name_plural = 'Новости'
        ordering = ['-created_at']  # сортировка в админке


class Category(models.Model):
    title = models.CharField(max_length=150, db_index=True, verbose_name='Наименование категории')  # db-index делает поле более быстрым для поиска

    def get_absolute_url(self):
        return reverse_lazy('category', kwargs={"category_id": self.pk})

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'
        ordering = ['title']

